<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript">
        window.onload=function()
        {
            //ES6允许使用【箭头】（=>）定义函数
            //声明一个函数
            let fn1=function(){};
            let fn2=(a,b)=>
            {
                return a+b;
            };
            
            //调用函数
            let result=fn2(1,2);
            console.log(result);

            //1.this是静态的，this始终指向函数声明时所在作用域下的this的值
            function getName()
            {
                console.log(this.name)
            }
            let getName2=()=>
            {
                console.log(this.name);
            };
            //设置window对象的name属性
            window.name="尚硅谷";
            const school={name:"ATGUIGU"};
            getName();
            getName2();

            //call方法调用
            getName.call(school);
            getName2.call(school);
            //此时箭头函数的this依然是指向window.name，而不是变为school指向的name

            //2.不能作为构造实例化对象
            let Person=(name,age)=>
            {
                this.name=name;
                this.age=age;
            };
            /*
            此时控制台会报错，Person并不是一个构造器，也就是不能作为构造函数使用
            let me=new Person("DDD",15);
            console.log(me);
            */
            
            //3.不能使用arguments变量
            let fn3=()=>
            {
                console.log(arguments);
            };
            let fn4=function()
            {
                console.log(arguments);
            };
            fn4(2,3,4);
            fn3(4,5,6);

            //4.关于箭头函数的简写
            //1）省略小括号，当形参有且只有一个的时候
            let add1=(n)=>
            {
                return n+n;
            };
            let add2=m=>
            {
                return m+m;
            };
            console.log(add1(3));
            console.log(add2(4));
            //2）省略花括号，当代码体只有一条语句的时候，此时return必须省略
            //而且语句的执行结果就是函数的返回值
            let pow1=(n)=>
            {
                return n*n;
            };
            let pow2=n=>n*n;
            console.log(pow1(4));
            console.log(pow2(6));
        };
    </script>
</head>
<body>
    
</body>
</html>